package com.lvyq.myplayer.base

import android.content.Context
import android.location.GnssAntennaInfo.Listener
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.lvyq.myplayer.widget.LoadMoreView
import com.lvyq.myplayer.widget.LoadNoMoreView

/**
 * 文件描述：BaseListAdapter
 * 作者：lvyq
 * 创建时间：2025-02-25
 * 修改时间：2025-02-25
 */
abstract class BaseListAdapter<ITEMBEAN,ITEMVIEW:View>:RecyclerView.Adapter<BaseListAdapter.BaseListHolder>() {

    //数据定义
    var list = ArrayList<ITEMBEAN>()
    //总条数
    var totalCount = Int.MAX_VALUE
    //更新数据
    fun updateList(list:List<ITEMBEAN>, totalCount:Int){
        this.list.clear()
        this.list.addAll(list)

        this.totalCount=totalCount
        //刷新数据
        notifyDataSetChanged()
    }

    fun loadMore(list:List<ITEMBEAN>, totalCount:Int){
        this.list.addAll(list)
        this.totalCount=totalCount
        //刷新数据
        notifyDataSetChanged()
    }


    class BaseListHolder(itemView: View): RecyclerView.ViewHolder(itemView){

    }


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseListHolder {
        if (viewType==2){
            //无更多数据，到底了
            return BaseListHolder(LoadNoMoreView(parent.context))
        }
        if (viewType==1){
            //最后一条，返回进度条
            return BaseListHolder(LoadMoreView(parent.context))
        }else{
            //普通条目
            return BaseListHolder(getItemView(parent.context))
        }
    }


    /**
     * 返回类型，用于显示判断
     */
    override fun getItemViewType(position: Int): Int {
        //无更多数据
        if (position==totalCount){
            return 2
        }
        if (position==list.size){
            //最后一条
            return 1
        }else{
            //普通条目
            return 0
        }
    }
    override fun getItemCount(): Int {
        //加1 显示进度条
        return list.size+1
    }

    override fun onBindViewHolder(holder: BaseListHolder, position: Int) {
        //如果最后一条，不需要刷新，防止越界异常
        if (position==list.size) return
        //歌单数据
        val data = list.get(position)
        //视图view
        val itemView = holder.itemView as ITEMVIEW

        refreshView(itemView,data)
      //  itemView.setData(data)

        //设置view条目点击事件
        itemView.setOnClickListener{
            //条目点击事件-数据回传
            listener?.invoke(data)
        }

    }
    //定义函数类型变量
    var listener :((itemBean:ITEMBEAN)->Unit)? = null
    fun setMyListener(listener: (itemBean:ITEMBEAN)->Unit){
        this.listener=listener
    }

    //刷新条目view
     abstract fun refreshView(itemView: ITEMVIEW, data: ITEMBEAN)

     //获取条目view
    abstract fun getItemView(context: Context?): ITEMVIEW

}